home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / sysext / init / bail.cpt / Bail ƒ / Bail Source / InitApplication Patch.c next >
Text File  |  1992-06-18  |  1KB  |  83 lines

  1. //    Patch for InitApplication to allow user to bail out
  2.  
  3. void main ( void ) ;
  4. void CheckForBail ( void );
  5. Boolean IsPressed(unsigned short k);
  6.  
  7.  
  8. void main ( void )
  9. {
  10.     long foo ;
  11.  
  12.     asm {
  13.  
  14.         movem.l d0-d7/a0-a4 , -(a7)
  15.         jmp @next
  16.     literal:
  17.         dc.w 0xeeee
  18.         dc.w 0xeeee
  19.     next:
  20.         move.l @literal , foo
  21.     }
  22.  
  23.         CheckForBail ( ) ; // Well, do it !
  24.  
  25.     asm {
  26.         movem.l (a7)+ , d0-d7/a0-a4
  27.         move.l foo , a0
  28.         unlk a6
  29.         jmp (a0)
  30.     }
  31. }
  32.  
  33.  
  34. void CheckForBail ( void )
  35. /*
  36.  *  Check to see if Command-. or the mouse button is down.  If so, Bail!
  37.  *  If the g key is down, break out of the timer loop and continue the launch. 
  38.  */
  39. {
  40.     register long    myTicks;
  41.     register long    count;
  42.     register long     base;
  43.     register long     row;
  44.     register char     *tmp;
  45.  
  46.  
  47.     base = ( long ) WMgrPort->portBits.baseAddr;
  48.     row = WMgrPort->portBits.rowBytes;
  49.     if ( row > 0 ) {        //Draw the dots
  50.         tmp = ( char * ) base + row * 10 + 2;
  51.         *tmp |= 0x03;
  52.     }
  53.  
  54.     myTicks = Ticks;
  55.     do
  56.     {
  57.         if(Button() || (IsPressed(0x2F) && IsPressed(0x37))){
  58.             ExitToShell();       //bail out
  59.         }
  60.         if(IsPressed(0x05)){
  61.             break;                //Continue Immediately
  62.         }
  63.     }while ( Ticks < myTicks + 180 );
  64.     
  65.     if ( row > 0 ) {
  66.                             //Erase the dots
  67.         tmp = ( char * ) base + row * 10 + 2;
  68.         *tmp &= 0xfc;
  69.  
  70.     }
  71.  
  72. }
  73.  
  74. Boolean IsPressed(unsigned short k)
  75. /*
  76.  *  Check to see if key number k is currently held down
  77.  */
  78. {
  79.     unsigned char    km[16];
  80.     
  81.     GetKeys(km);        //Get the KeyMap
  82.     return((km[k>>3]>>(k&7))&1);  //Check required bit
  83. }